home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / iguana / incosrc / incosrc.exe / MIRRBALL / PATH / MATRIX.PAS next >
Pascal/Delphi Source File  |  1993-06-18  |  2KB  |  82 lines

  1. UNIT Matrix;
  2.  
  3. INTERFACE
  4.  
  5. TYPE
  6.    Matrix4x4 = ARRAY [1..4,1..4] OF DOUBLE;
  7.    Matrix3x3 = ARRAY [1..3,1..3] OF DOUBLE;
  8.    Column4   = ARRAY [1..4] OF DOUBLE;
  9.  
  10.  
  11.  
  12. FUNCTION Determinante3(VAR m : Matrix3x3): DOUBLE;
  13.  
  14. FUNCTION Determinante4(VAR m : Matrix4x4): DOUBLE;
  15.  
  16. PROCEDURE PrepareMatrix(VAR mdest : Matrix4x4;
  17.                         VAR m : Matrix4x4; VAR c : Column4;
  18.                         i : INTEGER);
  19.  
  20.  
  21.  { -------------------------------------- }
  22.  
  23. IMPLEMENTATION
  24.  
  25.  
  26. FUNCTION Determinante3(VAR m : Matrix3x3): DOUBLE;
  27.   VAR
  28.      a : DOUBLE;
  29.   BEGIN
  30.      a := 0;
  31.      a := a + m[1,1]*m[2,2]*m[3,3];
  32.      a := a + m[2,1]*m[3,2]*m[1,3];
  33.      a := a + m[3,1]*m[1,2]*m[2,3];
  34.      a := a - m[3,1]*m[2,2]*m[1,3];
  35.      a := a - m[2,1]*m[1,2]*m[3,3];
  36.      a := a - m[1,1]*m[2,3]*m[3,2];
  37.      Determinante3 := a
  38.   END;
  39.  
  40.  
  41. FUNCTION Determinante4(VAR m : Matrix4x4): DOUBLE;
  42.   VAR
  43.      i,j,k,l : INTEGER;
  44.      m1    : Matrix3x3;
  45.      r, d  : DOUBLE;
  46.      sign  : INTEGER;
  47.   BEGIN
  48. {     FOR i := 1 TO 4 DO
  49.         WriteLn(m[1,i]:10, ' ',m[2,i]:10, ' ',m[3,i]:10, ' ',m[4,i]:10);
  50.      WriteLn;
  51. }
  52.      r := 0;
  53.      sign  := 1;
  54.      FOR i := 1 TO 4 DO BEGIN
  55.         l := 1;
  56.         FOR j := 1 TO 3 DO BEGIN
  57.            IF j = i THEN
  58.               INC(l);
  59.            FOR k := 1 TO 3 DO
  60.               m1[j,k] := m[l,k+1];
  61.            INC(l)
  62.         END;
  63.         d := Determinante3(m1);
  64.         r := r + sign*m[i,1]*d;
  65.         sign := -sign
  66.      END;
  67.      Determinante4 := r
  68.   END;
  69.  
  70. PROCEDURE PrepareMatrix(VAR mdest : Matrix4x4;
  71.                         VAR m : Matrix4x4; VAR c : Column4;
  72.                         i : INTEGER);
  73.   VAR
  74.      j : INTEGER;
  75.   BEGIN
  76.      mdest := m;
  77.      FOR j := 1 TO 4 DO
  78.         mdest[i, j] := c[j]
  79.   END;
  80.  
  81.  
  82. END.